// import request from '@mcd/portal-components/dist/utils/newRequest';

import { AIGC_PROXY_HOST } from '@/config';

const BASE_API = AIGC_PROXY_HOST;
// 定义状态码消息映射
const codeMessage = {
  200: '服务器成功返回请求的数据。',
  201: '新建或修改数据成功。',
  202: '一个请求已经进入后台排队（异步任务）。',
  204: '删除数据成功。',
  400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
  401: '用户没有权限（令牌、用户名、密码错误）。',
  403: '用户得到授权，但是访问是被禁止的。',
  404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误，请检查服务器。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。'
};

// 请求配置
const defaultOptions = {
  timeout: 1000 * 30, // 默认超时时间
  headers: { 'Content-Type': 'application/json;charset=utf-8' },
  baseURL: BASE_API || '' // 请求基地址
};

// 异常拦截处理器
const errorHandler = (error) => {
  if (error.response) {
    console.log(codeMessage[error.response.status] || '未知错误');
  }
  return Promise.reject(error);
};

// 请求拦截器
const requestInterceptor = (config) => {
  const newConfig = { ...config };

  // 添加基础URL
  newConfig.url = `${defaultOptions.baseURL}${config.url}`;

  // 添加token到header
  const token = sessionStorage.getItem('token');
  // if (token) {
  //   newConfig.headers.append('Authorization', `Bearer ${token}`);
  // } else {
  //   console.log('没有token');
  // }

  return newConfig;
};

// 响应拦截器
const responseInterceptor = (response) => {
  if (response.ok) {
    return response.json();
  } else {
    throw response;
  }
};

// 创建一个封装后的fetch函数
const fetchWrapper = (url, options = {}) => {
  const config = requestInterceptor({ ...defaultOptions, ...options, url });

  // 设置超时
  const controller = new AbortController();
  const { signal } = controller;
  const timeoutId = setTimeout(() => controller.abort(), config.timeout);

  return fetch(config.url, { ...config, signal })
    .then((response) => {
      clearTimeout(timeoutId);
      return responseInterceptor(response);
    })
    .catch((error) => {
      clearTimeout(timeoutId);
      if (error.name === 'AbortError') {
        console.error('请求超时');
      }
      return errorHandler(error);
    });
};

// 创建一个API客户端类
class APIClient {
  get(url, options = {}) {
    return fetchWrapper(url, { ...options, method: 'GET' });
  }

  post(url, body, options = {}) {
    return fetchWrapper(url, { ...options, method: 'POST', body: JSON.stringify(body) });
  }

  put(url, body, options = {}) {
    return fetchWrapper(url, { ...options, method: 'PUT', body: JSON.stringify(body) });
  }

  delete(url, options = {}) {
    return fetchWrapper(url, { ...options, method: 'DELETE' });
  }
}

export default new APIClient();

// function sendHttpRequest(params) {
//   return new Promise((resolve, reject) => {
//     request(params).then((response) => {
//         resolve(response.data)
//         // 对响应数据做点什么
//         // if (response.data) {
//         //   const { code, msg, data } = response.data;
//         //   // return Promise.resolve(data);
//         //   switch (code) {
//         //     case "200":
//         //     case 200:
//         //     case 2000:
//         //     case "SUCCESS":
//         //       return resolve(data);
//         //     case "401":
//         //     case 401:
//         //       // goLogin(msg || "登录信息失效，请重新登录!");
//         //       return reject(msg)
//         //     default:
//         //       message.error(msg);
//         //       return reject(msg);
//         //   }
//         // }
//       })
//       .catch((e) => {
//         reject(e);
//       });
//   });
// }

// export function post(url, param, prefixUrl) {
//   if (arguments[2] === void 0) {
//     prefixUrl = BASE_API;
//   }
//   return request({
//     url: prefixUrl +  url,
//     method: 'post',
//     data: param ? param : '',
//   })
// }

// export function put(url, param, prefixUrl) {
//   if (arguments[2] === void 0) {
//     prefixUrl = BASE_API;
//   }
//   return sendHttpRequest({
//     url: prefixUrl + url,
//     method: 'put',
//     data: param ? param : '',
//   });
// }

// export function deletes(url, param, prefixUrl) {
//   if (arguments[2] === void 0) {
//     prefixUrl = BASE_API;
//   }
//   return sendHttpRequest({
//     url: prefixUrl + url,
//     method: 'delete',
//     data: param ? param : '',
//   });
// }

// export function get(url, param, prefixUrl = BASE_API) {
//   if (arguments[2] === void 0) {
//     prefixUrl = BASE_API;
//   }
//   return sendHttpRequest({
//     url: prefixUrl + url,
//     method: 'get',
//     params: param ? param : '',
//   });
// }

// export function post_param(url, param, prefixUrl) {
//   if (arguments[2] === void 0) {
//     prefixUrl = BASE_API;
//   }
//   return sendHttpRequest({
//     url: prefixUrl + url,
//     method: 'post',
//     params: param ? param : '',
//   });
// }
